/**
 * 文件名：@SimpleBindProcessor.java <br/>
 * 包名：cn.efunbox.afw.core.annotation.processor <br/>
 * 项目名：afw-core <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.core.annotation.processor;

import java.util.Map.Entry;

import cn.efunbox.afw.core.annotation.mvc.Bind;
import cn.efunbox.afw.core.bean.PropertyEditor;
import cn.efunbox.afw.core.mvc.context.Context;

/**
 * 类名：SimpleBindProcessor  <br />
 *
 * 功能：Bind注解处理器基础实现
 *
 * @author xtwin <br />
 * 创建时间：2015年12月4日 下午4:00:22  <br />
 * @version 2015年12月4日
 */
public class SimpleBindProcessor implements BindProcessor {
	
	// 属性编辑器
	private PropertyEditor propertyEditor;

	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2015年12月4日 下午4:00:38<br/>
	 * 
	 * @param context
	 * @param bind
	 * @throws Exception <br/>
	 * @see cn.efunbox.afw.core.annotation.processor.BindProcessor#process(cn.efunbox.afw.core.mvc.context.Context, cn.efunbox.afw.core.annotation.mvc.Bind)
	 */
	@Override
	public void process(Context context, Bind bind) throws Exception {
		Class<?> type = bind.type();
		
		Object inst = type.newInstance();
		
		String prefix = bind.prefix() + ".";
		
		for (Entry<String, Object> entry : context.getValue().entrySet()) {
			String key = entry.getKey();
			
			if (key.startsWith(prefix)) {
				// 属性编辑器
				propertyEditor.setValue(inst, key.substring(prefix.length()), entry.getValue());
			}
		}
		
		// 更新上下文中的值
		context.setValue(bind.prefix(), inst);
	}

	/**
	 * @version 2015年12月4日-下午4:02:06
	 */
	public void setPropertyEditor(PropertyEditor propertyEditor) {
		this.propertyEditor = propertyEditor;
	}
}
